home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / RAMDSKA.68K < prev    next >
Text File  |  2001-09-30  |  4KB  |  158 lines

  1. ;RAMDSKA.68K    JUN-14-88    (ALSO SEE "INFOSTR")
  2. ;RAM DISK HANDLER
  3. ;WRITTEN BY LOREN BLANEY FOR DFM ENGINEERING
  4. ;
  5. ;REVISION HISTORY:
  6. ;MAR-05-86, ORIGINAL
  7. ;OCT-18-86, CONVERTED TO ASM68K CONVENTIONS AND MODIFIED
  8. ;MAR-22-87, MODIFIED FOR AMIGA
  9. ;JUN-14-88, CHANGED STRING TERMINATION CONVENTIONS
  10. ;
  11. ;WARNING:
  12. ;IF THE RAM DISK IS NOT CORRECTLY SIZED, MEMORY MAY BE BOMBED.
  13. ;
  14. ;INPUTS:
  15. ;    UNIT:    UNIT NUMBER
  16. ;    NBLKS:    NUMBER OF BLOCKS TO READ/WRITE
  17. ;    FADDR:    ADDRESS IN MEMORY TO WRITE/READ
  18. ;    BLKNOX:    BLOCK ON THE DISK TO START READ/WRITE
  19.  
  20.     NOLIST
  21.     INCLUDE    SYSPAG
  22.     LIST
  23.  
  24. UNTNUM    EQU    2        ;UNIT NUMBER OF FIRST RAM DISK
  25.                 ; (SECOND RAM DISK = UNTNUM + 1)
  26.  
  27. SIZE    EQU    1024 *256    ;MAX SIZE: 1024 BLOCKS
  28.                 ; (ALSO SEE "INFOSTR" AND "MAXTBL"
  29. BASE0    EQU    $FBFE00        ;BASE ADDRESS OF RAM DISK SPACE
  30. BASE1    EQU    $020000        ;BASE ADDRESS OF RAM DISK SPACE
  31.  
  32. ;HANDY COMPARISON CHART:
  33. ;     HEX BYTES    MEGA BYTES      BYTES            BLOCKS
  34. ;     $40000        1/4          262,144        1024
  35. ;     $80000        1/2          524,288        2048
  36. ;     $C0000        3/4          786,432        3072
  37. ;    $100000        1        1,048,576        4096
  38.  
  39. CIAA    EQU    $BFE001        ;8520-A
  40.  
  41.     ORG    $7D710
  42. START    EQU    @        ;ADDRESS WHERE THIS HANDLER STARTS
  43.  
  44. ;-----------------------------------------------------------------------
  45. ;
  46. RAMDSK    DC.L    DUMMY        ;0
  47.     DC.L    DUMMY        ;1
  48.     DC.L    READ        ;2
  49.     DC.L    WRITE        ;3
  50.     DC.L    DUMMY        ;4
  51.     DC.L    GETINFO        ;5
  52.     DC.L    DUMMY        ;6 (SPARE)
  53.     DC.L    DUMMY        ;7 (SPARE)
  54.  
  55. ;-----------------------------------------------------------------------
  56. ;READ BYTES FROM RAM DISK AND STORE THEM INTO MEMORY
  57. ;
  58. READ    MOVEM.L    D0-D7/A3-A6,-(SP)    ;SAVE REGISTERS
  59.     BSR    SETUP            ;SET UP A5, A6, AND D0
  60.     BSR    MOVBLK            ;MOVE BLOCKS FROM A6 TO A5
  61.     MOVEM.L    (SP)+,D0-D7/A3-A6    ;RESTORE REGISTERS
  62. DUMMY    RTS
  63.  
  64. ;-----------------------------------------------------------------------
  65. ;WRITE BYTES FROM MEMORY ONTO THE RAM DISK
  66. ;
  67. WRITE    MOVEM.L    D0-D7/A2-A6,-(SP)    ;SAVE REGISTERS
  68.  
  69.     BTST    #0,UNIT        ;CHECK UNIT NUMBER
  70.     BNE.S    WR10        ;BRANCH IF IT IS ODD
  71.     JSR    VERROR        ;WE CANNOT WRITE TO KICKSTART RAM
  72.     ASCII    '0 - WRITE PROTECTED'
  73.     DC.B    0
  74.     BRA.S    WR90
  75. WR10
  76. ;    LEA    CIAA.L,A2
  77. ;    BSET    #0,(A2)            ;TURN ON MEMORY OVERLAY
  78.  
  79.     BSR.S    SETUP            ;SET UP A5, A6, AND D0
  80.     EXG    A5,A6
  81.     BSR.S    MOVBLK            ;MOVE BLOCKS FROM A6 TO A5
  82.  
  83. ;    BCLR    #0,(A2)            ;TURN OFF MEMORY OVERLAY
  84.  
  85. WR90    MOVEM.L    (SP)+,D0-D7/A2-A6    ;RESTORE REGISTERS
  86.     RTS
  87.  
  88. ;-----------------------------------------------------------------------
  89. ;RETURN THE ADDRESS OF THE INFORMATION BLOCK IN D0
  90. ;
  91. GETINFO    MOVE.L    #INFO,D0
  92.     RTS
  93.  
  94. INFO    DC.L    START        ;HANDLER START AND END ADDRESSES
  95.     DC.L    END
  96.     DC.L    INFOSTR
  97. INFOSTR    ASCII    'RAMDSKA   JUN-14-88  Memory, 1024 blocks'
  98.     DC.B    0
  99.  
  100. ;-----------------------------------------------------------------------
  101. ;SET UP A5 AND A6 AS MEMORY ADDRESS POINTERS AND D0 AS THE NUMBER OF
  102. ; 32-BYTE BLOCKS TO MOVE.
  103. ;
  104. SETUP    LEA    BASE0.L,A6    ;ASSUME EVEN NUMBERED UNIT
  105.     BTST    #0,UNIT        ;CHECK UNIT NUMBER
  106.     BEQ.S    SU10        ;BRANCH IF IT IS EVEN
  107.     LEA    BASE1.L,A6    ;GET BASE FOR ODD NUMBERED UNIT
  108. SU10
  109.     MOVE.L    BLKNOX,D0    ;A6:= BLKNOX * 256 + BASE
  110.     ASL.L    #8,D0        ; = MEMORY ADDRESS IN RAM DISK
  111.     ADDA.L    D0,A6
  112.     MOVEA.L    FADDR,A5    ;A5:= MEMORY ADDRESS
  113.     MOVE.L    NBLKS,D0    ;D0:= NBLKS * 8
  114.     ASL.L    #3,D0        ; = NUMBER OF 32-BYTE BLOCKS (256 /32 =8)
  115.     RTS
  116.  
  117. ;-----------------------------------------------------------------------
  118. ;MOVE D0*32 BYTES FROM A6 TO A5.
  119. ; MOST REGISTERS ARE DESTROYED.
  120. ; NOTE UNUSUAL ENTRY POINT.
  121. ;
  122. MOVBLK    MOVE.L    D0,D1        ;PUT UPPER 16 BITS OF D0 IN D1
  123.     SWAP    D1        ; FOR THE 16-BIT DBF INSTRUCION
  124.     BRA.S    MOV20        ;ENTER LOOP AT BOTTOM
  125.  
  126. MOV10    MOVEM.L    (A6)+,A3-A4/D2-D7 ;READ 32 BYTES AT A6
  127.     MOVEM.L    A3-A4/D2-D7,(A5)  ;WRITE 32 BYTES AT A5
  128.     ADDA.L    #32,A5        ;(POST INCREMENTING IS NOT ALLOWED)
  129. MOV20    DBF    D0,MOV10    ;DECREMENT LOW 16 BITS, AND LOOP
  130.     DBF    D1,MOV10    ;DECREMENT HIGH 16 BITS, AND LOOP
  131.     RTS
  132.  
  133.     IF    @ >= $7D800
  134.     ERROR -- TOO BIG
  135.     ENDIF
  136.  
  137. END    EQU    @-1        ;ADDRESS OF END OF HANDLER
  138.  
  139. ;======================================================================
  140. ;HOOK THIS HANDLER INTO THE UNIT-HANDLER TABLE
  141. ;
  142.     ORG    4 *UNTNUM +MAXTBL
  143.     DC.L    SIZE /256
  144.     DC.L    SIZE /256
  145.  
  146.     ORG    4 *UNTNUM +OFFTBL
  147.     DC.L    0
  148.     DC.L    0
  149.  
  150.     ORG    4 *UNTNUM +UNTTBL
  151.     DC.L    RAMDSK
  152.     DC.L    RAMDSK
  153.  
  154.     END
  155. 56
  156.     DC.L    SIZE /256
  157.  
  158.     ORG    4 *UNTNUM +OFF